﻿using System;
using System.Collections;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;
using ControlAlarmaNamespace;
using ControlHorsetrackNamespace;
//using VariablesGlobalesNamespace;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using WebMsgBoxNamespace;
using ControlDbNamespace;
using ControlLogNamespace;
using System.Web.Script.Services;
using System.Xml.Serialization;

/// <summary>
/// Descripción breve de Horsejack
/// </summary>
[WebService(Namespace = "http://www.horsetrack.com.ar")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente. 
// [System.Web.Script.Services.ScriptService]
public class HorsetrackWebService : System.Web.Services.WebService 
{


    /**********************************************************************************/
    /***    public bool actualizarDatosGPSenDB(DatosGPS objActDatosGPS)             ***/
    /***Modify: FD 12-3-12                                                          ***/
    /**********************************************************************************/
  

    [WebMethod]
    public bool actualizarDatosGPSenDB(DatosGPS objActDatosGPS)
    {
        try
        {
            Caballo objCaballo = new Caballo();

            ControlDB objControlDB = new ControlDB();

            ControlLog.writeLog("[actualizarDatosGPSenDB] Obteniendo caballo por IMEI" + objActDatosGPS.strImei);

            objCaballo = objControlDB.objBuscarCaballoPorIMEI(objActDatosGPS.strImei);

            objControlDB.actualizarCaballoconDatosGPS(objActDatosGPS, objCaballo);
            objControlDB.actualizarFechaUltimaActualizacion(objCaballo);
            objControlDB.agregarCoordenadasATrazabilidad(objActDatosGPS, objCaballo);
            objControlDB.AgregarCoordenadasATrazabilidadHistorica(objActDatosGPS, objCaballo);

            delegEvaluacionEventos delegEvaluacion = new delegEvaluacionEventos(ControlHorsetrack.evaluacionEventos);
            delegEvaluacion(objCaballo);

            ControlLog.writeLog("[actualizarDatosGPSenDB] Finalizado OK");
        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[actualizarDatosGPSenDB] Excepcion=" + ex.Message);
            throw ex;
        }
        //Eliminar la marca de comentario de la línea siguiente si utiliza los componentes diseñados 
        //InitializeComponent(); 
        return true;
    }

    /*
    [WebMethod]
    public bool agregarEquipo(DatosGPS objDatosGPS)
    { 
        Equipo objEquipo=new Equipo();
         ControlDB objControlDB = new ControlDB();
        try
        {
            objEquipo.armarObjEquipo(objDatosGPS,objEquipo);
            objControlDB.agregarEquipoenDB(objEquipo);
        }
        catch(Exception ex)
        {
            ControlLog.writeLog("[agregarEquipo] Excepcion=" + ex.Message);
            throw ex;
        }
        return true;
    }
    */


    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public bool echoTest(string strMensaje)
    {
        ControlLog.writeLog("[WebMethod:echoTest] Mensaje ="+strMensaje);
        return true;
    }

    [WebMethod]
    public List<Alerta> obtenerAlarmasDisponibles()    
    {
        List<Alerta> lstAlerta = new List<Alerta>();
        ControlDB objConnection = new ControlDB();

        lstAlerta=objConnection.obtenerAlertasDisponibles();
        
        
        return lstAlerta;
    }
    [WebMethod]
    public bool limpiarAlertasProcesadas(List<Alerta> lstAlertas)
    {
        try
        {

            ControlDB objConnection = new ControlDB();
            foreach (Alerta objAlerta in lstAlertas)
            {
                objConnection.limpiarAlertaDisponible(objAlerta);
            }
        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[WebMethod:limpiarAlertasProcesadas] Excepcion limpiando alertas procesadas  =" + ex.Message);
            return false;
        }

        return true;
    }

    [WebMethod]
    public bool ExisteImei(string ImeiParam)
    {
        ControlDB objControlDB = new ControlDB();
        bool boolValue = false;
        try
        {

            boolValue = objControlDB.ExisteImei(ImeiParam);
        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[WebMethod:ExisteImei] Excepcion buscando IMEI  =" + ex.Message);
            boolValue = false;
        }

        return boolValue;
    }

    [WebMethod]
    public bool ActivarUsuarioPorPrimeraVez(string emailParam, string imeiParam)
    {
        ControlDB objControlDB = new ControlDB();
        bool boolValue = false;
        try
        {

            boolValue = objControlDB.UsuarioActivaPorPrimeraVez(emailParam);
            if(boolValue)
            {
                boolValue = objControlDB.ActivarImeiPorEmailUsuario(emailParam, imeiParam);
            }
            
        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[WebMethod:ExisteImei] Excepcion buscando IMEI  =" + ex.Message);
            boolValue = false;
        }

        return boolValue;
    }
      
    [WebMethod]
    public bool limpiarDatosTrazabilidad()
    {
        ControlDB  objControlDB = new ControlDB();
        try
        {
                   
            
            objControlDB.limpiarDatosTrazabilidadSQL(1);

        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[limpiarDatosTrazabilidad] Excepcion=" + ex.Message);
            throw ex;
        }
        //Eliminar la marca de comentario de la línea siguiente si utiliza los componentes diseñados 
        //InitializeComponent(); 
        return true;
    }

    [WebMethod]
    public List<Cliente> ObtenerListaClientes()
    {
        List<Cliente> lstCliente = null;
        ControlDB conn = new ControlDB();
        try
        {
            lstCliente = conn.ObtenerClientes();
        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[ObtenerListaClientes] Excepcion = " + ex.Message);
        }

        return lstCliente;
    }
   
    [WebMethod]
    public int AgregarCeloso(Cliente celoso)
    {
        int idCeloso = 0;

        try
        {
            ControlDB conn = new ControlDB();
            idCeloso = conn.AgregarClienteEnDB(celoso);
            
        }
        catch(Exception ex)
        {
            ControlLog.writeLog("[agregarCeloso] Excepcion agregando celoso = "+ex.Message);
        }

        return idCeloso;
    }

    [WebMethod]
    public int AgregarCelularCelado(Equipo celularCelado)
    {
        int idCelularCelado = 0;

        try
        {
            ControlDB conn = new ControlDB();
            idCelularCelado = conn.AgregarEquipoEnDB(celularCelado);
        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[AgregarCelularCeloso] Excepcion agregando celular celado = " + ex.Message);
        }

        return idCelularCelado;
    }

    [WebMethod]
    public bool AgregarCelado(Caballo celado)
    {
        bool boolReturn = false;

        try
        {
            ControlDB conn = new ControlDB();
            conn.AgregarCaballoEnDB(celado);
        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[AgregarCelado] Excepcion agregando celado = " + ex.Message);
        }

        return boolReturn;
    }

    [WebMethod]
    public bool DeshabilitarCelado(int idCelado)
    {
        bool boolReturn = true;
        try
        {
            ControlDB conn = new ControlDB();
            conn.DeshabilitarCelado(idCelado);
        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[DeshabilitarCelado] Excepcion deshabilitando celado = " + ex.Message);
        }
        return boolReturn;
    }

    [WebMethod]
    public bool HabilitarCelado(int idCelado)
    {
        bool boolReturn = true;
        try
        {
            ControlDB conn = new ControlDB();
            conn.HabilitarCelado(idCelado);
        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[HabilitarCelado] Excepcion habilitando celado = " + ex.Message);
        }
        return boolReturn;
    }

    #region Transaccion
    [WebMethod]
    public List<Transaccion> ObtenerListaTransaccion()
    {
        List<Transaccion> lstTrans = null;
        ControlDB conn = new ControlDB();
        try
        {
            lstTrans = conn.ObtenerTransacciones();
        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[ObtenerListaTransaccion] Excepcion = " + ex.Message);
        }

        return lstTrans;
    }

    [WebMethod]
    public bool AgregarTransaccion(Transaccion transaccion)
    {
        bool boolReturn = false;
        try
        {
            ControlDB conn = new ControlDB();
            boolReturn = conn.AgregarTransaccion(transaccion);

        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[AgregarTransaccion] Excepcion agregando transaccion = " + ex.Message);
        }

        return boolReturn;
    }

    #endregion


    #region Trazabilidad
    [WebMethod]
    public Trazabilidad ObtenerTrazabilidadHistorica(Caballo caballoParam)
    {
        Trazabilidad trace = null;

        ControlDB conn = new ControlDB();
        try
        {
            trace = conn.ObtenerTrazabilidadHistorica(caballoParam);
        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[ObtenerTrazabilidadHistorica] Excepcion = " + ex.Message);
        }

        return trace;
    }

    [WebMethod]
    public List<string> UltimasActualizaciones()
    {
        List<string> ultimasAct = null;

        ControlDB conn = new ControlDB();
        try
        {
            ultimasAct = conn.UltimasActualizaciones();
        }
        catch (Exception ex)
        {
            ControlLog.writeLog("[UltimasActualizaciones] Excepcion = " + ex.Message);
        }

        return ultimasAct;
        
    }
    #endregion
  

   


  /*
    #region Caballos
    [WebMethod]
    public List<objCaballo> obtenerListaCaballos()
    {
     

        return lstCaballo;
    }
   
    [WebMethod]
    public bool modificarCaballo(objCaballo objNuevoCaballo)
    {
        bool boolReturn = false;

        return boolReturn;
    }     
    [WebMethod]
    public bool borrarCaballos(objCaballo objCaballo)
    {
        bool boolReturn = false;
 
        return boolReturn;
    }
    #endregion
   
    #region Equipos
    [WebMethod]
    public List<Equipo> obtenerListaDeEquipos()
    {
        List<Equipo> lstEquipo = new List<Equipo>();


        return lstEquipo;
    }
    [WebMethod]    
    public bool agregarEquipo(Equipo objNuevoEquipo)
    {
        bool boolReturn = false;
       
        return boolReturn;
    }
    [WebMethod]
    public bool borrarEquipo(Equipo objEquipo)
    {
        bool boolReturn = false;
      
        return boolReturn;
    }
    [WebMethod]
    public bool modificarEquipo(Equipo objEquipo)
    {
        bool boolReturn = false;
       
        return boolReturn;
    }

    #endregion
    #region KERNEL
    [WebMethod]
    public bool actualizarCoordenadasPorIMEI(objCaballo objCaballo)
    {
        bool boolReturn = false;
       
        return boolReturn;
    }
    #endregion

    [WebMethod]
    public List<IAlarma> obtenerAvisos(Cliente objCliente)
    {
        List<IAlarma> lstAlarmas = new List<IAlarma>();

        return lstAlarmas;
    }
   * */
}

